package br.eng.eliseu.gwt.gestaoWeb.model.endereco;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;

import br.eng.eliseu.gwt.gestaoWeb.model.BaseEntity;

@Entity
@SequenceGenerator(name="SQ_ESTADO", sequenceName="SQ_ESTADO")
@NamedQueries({
	@NamedQuery(name="estado.todos", query="select e from Estado e order by e.nome"),
	@NamedQuery(name="estado.porPais", query="select e from Estado e where e.sigla is not null and e.pais = :pais order by e.nome"),
	@NamedQuery(name="estado.porPaisHeSigla", query="select e from Estado e where 1=1 "+
			"and e.sigla is not null "+
			"and e.pais = :pais "+
			"and e.sigla = :sigla "+
			"order by e.nome")
})
public class Estado extends BaseEntity {


	public Estado() {}
	
	@Id
	@GeneratedValue(generator="SQ_ESTADO", strategy=GenerationType.AUTO)
	private Integer id;
	
	private Integer idIBGE;

	@Column(length=30)
	private String nome;

	@Column(length=150)
	private String nomeCompleto;

	@Column(length=2)
	private String sigla;
	
	@ManyToOne
	@JoinColumn(name="pais_id")
	private Pais pais;
	

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getIdIBGE() {
		return idIBGE;
	}
	public void setIdIBGE(Integer idIBGE) {
		this.idIBGE = idIBGE;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNomeCompleto() {
		return nomeCompleto;
	}
	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}
	public String getSigla() {
		return sigla;
	}
	public void setSigla(String sigla) {
		this.sigla = sigla;
	}
	@Override
	public String toString() {
		return sigla;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((nomeCompleto == null) ? 0 : nomeCompleto.hashCode());
		result = prime * result + ((pais == null) ? 0 : pais.hashCode());
		result = prime * result + ((sigla == null) ? 0 : sigla.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Estado other = (Estado) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (nomeCompleto == null) {
			if (other.nomeCompleto != null)
				return false;
		} else if (!nomeCompleto.equals(other.nomeCompleto))
			return false;
		if (pais == null) {
			if (other.pais != null)
				return false;
		} else if (!pais.equals(other.pais))
			return false;
		if (sigla == null) {
			if (other.sigla != null)
				return false;
		} else if (!sigla.equals(other.sigla))
			return false;
		return true;
	}

	public int compareTo(Estado obj) {
		return getSigla().compareTo(obj.getSigla());
	}
	
	public void setPais(Pais pais) {
		this.pais = pais;
	}
	public Pais getPais() {
		return pais;
	}
}